package ar.com.age.distribuidora.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import ar.com.age.distribuidora.dao.AjusteDao;
import ar.com.age.distribuidora.dao.ConfiguracionAjusteDao;
import ar.com.age.distribuidora.dominio.Ajuste;
import ar.com.age.distribuidora.dominio.ConfiguracionAjuste;
import ar.com.age.distribuidora.service.AjusteService;
import ar.com.age.distribuidora.service.LoteDeCompraService;

public class AjusteServiceImpl implements AjusteService {

	private ConfiguracionAjusteDao configuracionAjusteDao;
	
	private AjusteDao ajusteDao;
	
	private LoteDeCompraService loteDeCompraService;
	
	@Autowired(required = true)
	public void setConfiguracionAjusteDao(ConfiguracionAjusteDao configuracionAjusteDao) {
		this.configuracionAjusteDao = configuracionAjusteDao;
	}
    
    @Autowired(required = true)
	public void setAjusteDao(AjusteDao ajusteDao) {
		this.ajusteDao = ajusteDao;
	}
    
    @Autowired(required = true)
	public void setLoteDeCompraService(LoteDeCompraService loteDeCompraService) {
		this.loteDeCompraService = loteDeCompraService;
	}
    
    //Configuracion Ajuste
    
    @Override
	public void crearOEditarConfiguracionAjuste(ConfiguracionAjuste configuracionAjuste) {
		
    	configuracionAjusteDao.saveOrUpdate(configuracionAjuste);		
	}

	@Override
	public List<ConfiguracionAjuste> buscarTodosConfiguracionAjuste() {

		return configuracionAjusteDao.getAll();
	}
	
	@Override
	public void eliminarConfiguracionAjuste(ConfiguracionAjuste configuracionAjuste) {
		
		configuracionAjusteDao.physicalDelete(configuracionAjuste);
	}
	
	// Ajuste
	
	@Override
	public void crearOEditarAjuste(Ajuste ajuste) {
		
		// Actualizar el Monto Actual del lote de compra
		if (ajuste.getConfiguracionAjuste().getImpacto()) {
			// Sumo
			ajuste.getLoteDeCompra().setCantidadActual(ajuste.getLoteDeCompra().getCantidadActual() + ajuste.getCantidad());
			
		} else {
			// Resto
			ajuste.getLoteDeCompra().setCantidadActual(ajuste.getLoteDeCompra().getCantidadActual() - ajuste.getCantidad());

		}
		
		loteDeCompraService.crearOEditar(ajuste.getLoteDeCompra());
		
		ajusteDao.saveOrUpdate(ajuste);		
	}

	@Override
	public List<Ajuste> buscarTodosAjuste() {

		return ajusteDao.getAll();
	}
	
	@Override
	public void eliminarAjuste(Ajuste ajuste) {
		
		// Actualizar el Monto Actual del lote de compra
		if (ajuste.getConfiguracionAjuste().getImpacto()) {
			ajuste.getLoteDeCompra().setCantidadActual(ajuste.getLoteDeCompra().getCantidadActual() - ajuste.getCantidad());
			
		} else {
			ajuste.getLoteDeCompra().setCantidadActual(ajuste.getLoteDeCompra().getCantidadActual() + ajuste.getCantidad());

		}
		
		loteDeCompraService.crearOEditar(ajuste.getLoteDeCompra());

		ajusteDao.physicalDelete(ajuste);
	}
	
	@Override
	public List<Ajuste> buscarAjuste(String codigo, String lote, Date desde, Date hasta) {

		return ajusteDao.find(codigo, lote, desde, hasta);
	}
}
